package com.schrodinger.zwebservice.axis2.client;

import org.apache.axis2.AxisFault;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.schrodinger.zwebservice.axis2.client.factory.WSInvokerFactory;
import com.schrodinger.zwebservice.axis2.client.wscaller.IWSInvoker;

public class Axis2Client {
	
	private static Log log = LogFactory.getLog(Axis2Client.class);

	/**
	 * 调用有返回值的WebService方法，当方法没有参数时不能传入null，而需要传入new Object[]{};
	 * @param serviceMark web服务标志，如:oa613,trp等，配置在WebServiceConfig.xml中
	 * @param serviceName web服务名称，配置在服务端services.xml中，就是service节点的name属性
	 * @param targetClass 要调用的类的全路径，配置在服务端services.xml中，如:com.toone.oa.UserInterface,就是名称为serviceClass的参数值,
	 * 			或者是对应类生成wsdl的targetNameSpace
	 * @param args 要调用的方法的参数数据，如：new Object[]{"测试", 1, "数据"};
	 * @return 返回的数据（字符串）
	 * @throws AxisFault 
	 */
	public static String invokeMethodHasReturn(String serviceMark, String serviceName, String targetClass, String methodName, Object[] args) throws AxisFault{
		IWSInvoker invoker;
		String resultStr = "";
		try {
			invoker = WSInvokerFactory.getWSInvokerInstance(serviceMark,
					serviceName);
			if(targetClass.indexOf("http://") != -1){//是targetNameSpace
				resultStr = (String) invoker.invokeMethodHasReturn(targetClass,
						methodName, args,
						new Class[] { String.class });
			}else{
				resultStr = (String) invoker.invokerMethodHasReturn(targetClass,
						methodName, args,
						new Class[] { String.class });
			}			
		} catch (AxisFault e) {
			log.error(e.getMessage(), e);
		}
		return resultStr;
	}
	
	/**
	 * 调用无返回值的WebService方法，当方法没有参数时不能传入null，而需要传入new Object[]{};
	 * @param serviceMark web服务标志，如:oa613,trp等，配置在WebServiceConfig.xml中
	 * @param serviceName web服务名称，配置在服务端services.xml中，就是service节点的name属性
	 * @param targetClass 要调用的类的全路径，配置在服务端services.xml中，如:com.toone.oa.UserInterface,就是名称为serviceClass的参数值,
	 * 				或者是对应类生成wsdl的targetNameSpace
	 * @param args 要调用的方法的参数数据，如：new Object[]{"测试", 1, "数据"};
	 * @throws AxisFault 
	 */
	public static void invokeMethodHasNoReturn(String serviceMark, String serviceName, String targetClass, String methodName, Object[] args) throws AxisFault{
		IWSInvoker invoker;
		try {
			invoker = WSInvokerFactory.getWSInvokerInstance(serviceMark,
					serviceName);
			if(targetClass.indexOf("http://") != -1){//是targetNameSpace
				invoker.invokeMethodNoReturn(targetClass,
						methodName, args);
			}else{
				invoker.invokerMethodNoReturn(targetClass,
						methodName, args);
			}
		} catch (AxisFault e) {
			log.error(e.getMessage(), e);
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {

	}

}
